package com.qsl.system.exception;

import com.qsl.common.result.Result;
import com.qsl.common.result.ResultCodeEnum;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


/**
 * 异常处理:
 * 注意： 特定异常处理 >  全局异常处理
 */
@ControllerAdvice  // 开启异常处理器
public class ProjectExceptionHandler {

    // 全局异常处理
    @ExceptionHandler(Exception.class)
    @ResponseBody // 返回Json格式数据
    public Result error(Exception e) {
        System.out.println("全局异常处理....");
        e.printStackTrace(); // 打印异常
        return Result.fail().message("执行了全局异常处理");
    }

    // 特定异常处理
    @ExceptionHandler(ArithmeticException.class)
    @ResponseBody
    public Result error(ArithmeticException e) {
        System.out.println("特定异常处理....");
        e.printStackTrace(); // 打印异常
        return Result.fail().message(e.getMessage());
    }


    // 自定义异常
    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public Result error(BusinessException e) {
        System.out.println("自定义异常....");
        e.printStackTrace(); // 打印异常
        return Result.fail().message(e.getMessage()).code(e.getCode());
    }


    /**
     * 解决SpringSecurity框架前端无提示异常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(AccessDeniedException.class)
    @ResponseBody
    public Result error(AccessDeniedException e) throws AccessDeniedException {
        return Result.fail().message("没有对应权限")
                .code(ResultCodeEnum.PERMISSION.getCode());
    }


}
